package org.example.campusforum.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.example.campusforum.entity.Category;
import org.example.campusforum.mapper.CategoryMapper;
import org.example.campusforum.service.CategoryService;
import org.example.campusforum.vo.CategoryInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 分类服务实现类
 *
 * 实现文章分类相关的业务逻辑，包括分类信息的查询等功能。
 * 继承ServiceImpl提供基础的CRUD操作，实现CategoryService接口。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {

    /**
     * 分类数据访问层
     */
    @Autowired
    private CategoryMapper categoryMapper;

    /**
     * 获取所有启用的分类信息
     *
     * 查询所有状态为启用且未删除的分类信息，
     * 将实体对象转换为VO对象返回给前端。
     *
     * @return 分类信息列表
     */
    public List<CategoryInfo> getAll() {

        // 构建查询条件：状态为启用且未删除
        QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("status", 0);       // 启用状态
        queryWrapper.eq("is_deleted", 0);    // 未删除

        // 查询所有符合条件的分类信息
        List<Category> categoryList = categoryMapper.selectList(queryWrapper);

        // 将实体对象转换为VO对象
        ArrayList<CategoryInfo> categoryInfoList = new ArrayList<>();
        for (Category category : categoryList) {
            CategoryInfo categoryInfo = new CategoryInfo();
            BeanUtils.copyProperties(category, categoryInfo);
            categoryInfoList.add(categoryInfo);
        }

        return categoryInfoList;
    }
}
